home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1998 September
/
CHIP Eylül 1998.iso
/
freeware
/
mp3
/
nad093
/
frontend.txt
next >
Wrap
Text File
|
1998-04-20
|
5KB
|
151 lines
Writing code to 'interface' to NAD
----------------------------------
Many external programs, such as playlist editors etc, could benefit from being
able to 'talk' to NAD. This documents outlines the procedures needed to do so.
------------------------------------------------------------------------------------------
The NAD Main Window
-------------------
The Main NAD window can be obtained by doing the following(in C)
const TCHAR g_szClassName[] = TEXT("NadMainWindow");
HWND NadWindow = FindWindow(g_szClassName, NULL);
------------------------------------------------------------------------------------------
Command ID's
------------
#define ID_PLAY 40010
#define ID_STOP 40011
#define ID_PAUSE 40012
#define ID_NEXTTRACK 40013
#define ID_PREVIOUSTRACK 40014
#define ID_EXPANDWINDOW 40105 // this causes the NAD window to 'expand'
// or contract (like pressing the notch)
These messages are send to the main NAD window using the following code:
SendMessage(hWnd, WM_COMMAND, MAKEWPARAM(ID_EXPANDWINDOW, 0), (LPARAM)NULL);
(you can change the ID_EXPANDWINDOW to any of the above ID_'s...)
------------------------------------------------------------------------------------------
The NAD Communication System
----------------------------
These messages are sent to NAD using a WM_COPYDATA message. You can use this system
as an 'alternative' to starting a new NAD.EXE with a path to a playlist. Or to start NAD
playing a certain file from the playlist. NAD uses this system to talk to itself. If you have
multiple instances turned off.. See below for examples.
#define NCM_RESETPLAYLIST 0
#define NCM_ADDTOPLAYLIST 1
#define NCM_PLAYFILE 2
#define NCM_PLAYITEM 3
#define NCM_PLAYFROMSTART 4
#define NCM_SAVEPLAYLIST 5
#define NCM_SHUFFLE 6
Example 1. Resetting the NAD internal playlist:
-----------------------------------------------
COPYDATASTRUCT cds;
cds.dwData = NCM_RESETPLAYLIST;
cds.cbData = 0;
cds.lpData = NULL;
SendMessage(NadWindow, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&cds);
The playlist will now be empty!
Example 2. 'Downloading a playlist':
------------------------------------
COPYDATASTRUCT cds;
char Playlist[1000][_MAX_PATH]; // you could fill this will FULL filenames, or use a linked list
// there is NO limit to the number of files NAD can hold in a playlist except for memory...
int x;
for(x=0; x<1000; x++)
{
cds.dwData = NCM_ADDTOPLAYLIST;
cds.cbData = lstrlen(Playlist[x]); // This MUST be the LENGTH of the filename
cds.lpData = Playlist[x]; // This is the FILENAME
sendMessage(NadWindow, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&cds);
}
The playlist will now be populated with the Item from the array!.
Example 3. Telling NAD to play an Item/file.
--------------------------------------------
1>
cds.dwData = NCM_PLAYFROMSTART;
cds.cbData = 0;
cds.lpData = NULL;
SendMessage(NadWindow, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&cds);
This tells NAD to start playing from the START of the playlist.
2>
cds.dwData = NCM_PLAYFILE;
cds.cbData = strlen("C:\\test.mp3");
cds.lpData = "C:\\test.mp3";
SendMessage(NadWindow, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&cds);
This tells NAD to reset the playlist and start playing 'C:\test.mp3'.
3>
cds.dwData = NCM_PLAYITEM;
cds.cbData = 5;
cds.lpData = NULL;
SendMessage(NadWindow, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&cds);
This tells NAD to play Item number 5 from the playlist... the alternative is:
4>
cds.dwData = NCM_PLAYITEM;
cds.cbData = -1; // NOTE: the -1....
cds.lpData = "C:\\test.mp3\0\0";// This string ABSOLUTLEY MUST be DOUBLE NULL terminated(\0\0)
SendMessage(NadWindow, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&cds);
This tells NAD to search through the playlist for the FIRST occurence of the filename, set it to
be the CURRENT item and PLAY... the next track will be whatever comes after this file...
------------------------------------------------------------------------------------------
Other Miscelleneous Messages
----------------------------
For those of you who dont know WM_APP is defined in WINDOWS.H as 0x8000(HEX) or 32768(DEC)
you dont need to define this USUALLY.....
These commands are sent to the NAD window and NAD will RETURN the value. eg:
DWORD Playtime = SendMessage(NadWindow, WM_GETCURRENTPLAYTIME, 0, 0);
DWORD Seconds = Playtime/1000; // because its in MS....
#define WM_GETCURRENTPLAYTIME WM_APP + 0x0700 // returns playtime in MS
#define WM_GETCURRENTFRAME WM_APP + 0x0701 // returns the last decoded frame
#define WM_GETMAXFRAME WM_APP + 0x0702 // return the ESTIMATED number of frames
// this is -1 for a URL stream.
#define WM_GETVOLUME WM_APP + 0x0703 // returns the CURRENT volume Level
#define WM_SETVOLUME WM_APP + 0x0704 // lParam = the NEW volume
// VOLUME values are between 0 and 64, setting to more (or less) will have NO effect...
#define WM_SETCURRENTFRAME WM_APP + 0x0705 // lParam = the Frame to jump to
#define WM_GETPLAYSTATUS WM_APP + 0x0706 // returns integer value(see below)
// these are the return value from WM_SETPLAYSTATUS
#define STAT_PLAYING 0
#define STAT_PAUSED 1
#define STAT_STOPPED 2